// @ts-nocheck
import axios from 'axios';
import store from '@/store/index.js';
import Vue from 'vue';
// import QS from 'qs'

// 环境的切换
// 不同的环境使用不同的请求路径
if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = "https://api.menglaide.com";
} else if (process.env.NODE_ENV == 'debug') {
  axios.defaults.baseURL = "https://api.menglaide.com";
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = 'https://api.menglaide.com';
}

// 超时时间
axios.defaults.timeout = 30000;
// http请求拦截器
var loadinginstace;

// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';

axios.interceptors.request.use(
  config => {
    // 判断是否存在token，如果存在的话，则每个http header都加上token
    // if (store.state.token) {
    // config.headers.Authorization = `token ${store.state.token}`;
    config.headers.Authorization = localStorage.getItem('token');
    // }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// http响应拦截器
axios.interceptors.response.use(
  response => {
    // 响应成功关闭loading

    // this.$dialog.loading.close();

    return response;
  },
  error => {
    // 响应异常处理

    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          });
          break;
        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面
        case 403:
          // Message.error({
          //   message: '登录过期，请重新登录'
          // })
          // 清除token
          localStorage.removeItem('token');
          // store.commit('loginSuccess', null);
          // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          });

          break;
        // 404请求不存在
        case 404:
          // Message.error({
          //   message: '请求数据不存在'
          // })
          break;
        // 其他错误，直接抛出错误提示
        default:
        // Message.error({
        //   message: error.response.data.response_message
        // })
      }
      return Promise.reject(error.response);
    }
  }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
const get = (url, ...params) => {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params
      })
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data);
        // console.log(err)
      });
  });
};

/*
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
const post = (url, ...params) => {
  return new Promise((resolve, reject) => {
    axios
      .post(url, ...params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data);
      });
  });
};

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
const put = (url, ...params) => {
  return new Promise((resolve, reject) => {
    axios
      .put(url, ...params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data);
      });
  });
};

export default {
  get,
  post,
  put
};
